package dao.fachada;

import java.sql.Connection;
import java.util.List;

import models.Comentario;
import models.Produto;
import models.Tag;

import dao.ComentarioDAO;
import dao.ConexaoBanco;
import dao.FachadaDAO;
import dao.ProdutoDAO;

public class FachadaProdutoDAO {
	
	private static FachadaProdutoDAO singleton = null;
	
	private java.sql.Connection conexao;
	private ConexaoBanco conexaoBanco;
	
	public static FachadaProdutoDAO getInstance() {
        if (singleton == null) {
	        // "lazy instantiation"
	        singleton = new FachadaProdutoDAO();
        }
        return singleton;
    }
	
	private Connection openConexaoBanco(){
		this.conexaoBanco = new ConexaoBanco();		
		this.conexao = this.conexaoBanco.openConexao();
	
		return this.conexao;
	}
	
	private void closeConexaoBanco(){
		this.conexaoBanco.closeConexao();
	}
	
	public void alterar(Produto produto){
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		
		produtoDAO.alterarProduto(produto);
	}
	
	public Produto buscarProduto(String id) {
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		
		return produtoDAO.buscarPorID(id);
	}
	
	public void inserirComentario(String _conteudo, String _nome,
			String _produto_id) {
		
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		produtoDAO.inserirComentario(_conteudo, _nome, _produto_id);
		
		this.closeConexaoBanco();
	}

	public List<Comentario> listarComentarios(int id) {
		// TODO Auto-generated method stub
		ComentarioDAO comentarioDAO = new ComentarioDAO(this.openConexaoBanco());
		return comentarioDAO.listarComentarios(id);
	}

	public void addTagAoProduto(String _id, String _tagID) {
		// TODO Auto-generated method stub
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		produtoDAO.addTagAoProduto(_id, _tagID);
	}

	public boolean excluirProduto(String _id) {
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		return produtoDAO.excluirProduto(_id);
	}
	
	public List<Produto> buscarProdutosPorTag(String nome){
		List<Produto> lista ;
		
		FachadaTagDAO fachadaTagDAO = new FachadaTagDAO();
		Tag tag = fachadaTagDAO.buscarTagPorNome(nome);
		
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		lista = produtoDAO.buscarPorTag(tag);
		
		return lista;
	}

}
